--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
tests/backend/test_legacy_migrator.py v4.7.0-rc.4 (448cd46c) Text, 23.05 KB
T8b949e# SPDX-License-Identifier: 0BSD
Tff7b72import T7ee787os
Tff7b72import T7ee787shutil
Tff7b72import T7ee787sqlite3
Tff7b72import T7ee787stat
Tff7b72import T7ee787tempfile
Tff7b72from T7ee787pathlib Tff7b72import Te6edf3Path
Tff7b72from T7ee787unittestT7ee787.T7ee787mock Tff7b72import Te6edf3patch
Tff7b72import T7ee787pytest
Tff7b72import T7ee787RNS
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3HealthCheckTb4b4b4, Te6edf3givenTb4b4b4, Te6edf3settings
Tff7b72from T7ee787hypothesis Tff7b72import Te6edf3strategies Tff7b72as Te6edf3st
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787legacy_migrator Tff7b72import Tb4b4b4(
Te6edf3CURRENT_DIRTb4b4b4,
Te6edf3LEGACY_DIRTb4b4b4,
Te6edf3UPSTREAM_DIRTb4b4b4,
Te6edf3UPSTREAM_X_DIRTb4b4b4,
Te6edf3assert_migration_context_pathsTb4b4b4,
Te6edf3copy_legacy_storage_treeTb4b4b4,
Te6edf3fresh_storage_at_targetTb4b4b4,
Te6edf3migrate_legacy_to_targetTb4b4b4,
Te6edf3paired_legacy_from_newTb4b4b4,
Te6edf3paired_new_from_legacyTb4b4b4,
Te6edf3paired_upstream_plain_from_meshchatxTb4b4b4,
Te6edf3resolve_startup_storageTb4b4b4,
Te6edf3storage_has_meshchat_dataTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_paired_pathsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3newp Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Tff7b72assert Te6edf3paired_legacy_from_newTb4b4b4(Te6edf3newpTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3leg Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/aTa5d6ff"Tb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Tff7b72assert Te6edf3paired_new_from_legacyTb4b4b4(Te6edf3legTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/aTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Tff7b72assert Te6edf3paired_legacy_from_newTb4b4b4(Ta5d6ff"Ta5d6ff/tmp/storageTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffnew_pathTa5d6ff"Tb4b4b4,
Tb4b4b4[
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)Tb4b4b4,
Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffpTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIR Tff7b72+ Te6edf3osTff7b72.Td2a8ffsepTb4b4b4)Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_paired_legacy_trailing_slash_invariantTb4b4b4(Te6edf3new_pathTb4b4b4)Tb4b4b4:
Te6edf3leg Tff7b72= Te6edf3paired_legacy_from_newTb4b4b4(Te6edf3new_pathTb4b4b4)
Tff7b72assert Te6edf3leg Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffbasenameTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffnormpathTb4b4b4(Te6edf3legTb4b4b4)Tb4b4b4) Tff7b72== Te6edf3LEGACY_DIR
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(Ta5d6ff"Ta5d6ffwrong_baseTa5d6ff"Tb4b4b4, Tb4b4b4[Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.meshchatTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIR Tff7b72+ Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4]Tb4b4b4)
Tff7b72def Td2a8fftest_paired_none_for_wrong_basenameTb4b4b4(Te6edf3wrong_baseTb4b4b4)Tb4b4b4:
Te6edf3p Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffzTa5d6ff"Tb4b4b4, Te6edf3wrong_baseTb4b4b4)
Tff7b72assert Te6edf3paired_legacy_from_newTb4b4b4(Te6edf3pTb4b4b4) Tff7b72is Tff7b72None
Tff7b72assert Te6edf3paired_new_from_legacyTb4b4b4(Te6edf3pTb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_storage_has_meshchat_data_identityTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3ident Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"
Te6edf3identTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72def Td2a8fftest_storage_has_meshchat_data_identities_dbTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3dbdir Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffabcTa5d6ff"
Te6edf3dbdirTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3dbdir Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72True
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(
Ta5d6ff"Ta5d6ffsetupTa5d6ff"Tb4b4b4,
Tb4b4b4[
Ta5d6ff"Ta5d6ffnonexistentTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffempty_identityTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffzero_byte_identityTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffidentities_no_dbTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffidentities_emptyTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffnot_a_directoryTa5d6ff"Tb4b4b4,
Tb4b4b4]Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_storage_has_meshchat_data_negativeTb4b4b4(Te6edf3tmp_pathTb4b4b4, Te6edf3setupTb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffnonexistentTa5d6ff"Tb4b4b4:
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffnopeTa5d6ff"Tb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72return
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffempty_identityTa5d6ff"Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72return
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffzero_byte_identityTa5d6ff"Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72return
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffidentities_no_dbTa5d6ff"Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffh1Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffh1Ta5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffreadme.txtTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffxTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72return
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffidentities_emptyTa5d6ff"Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72return
Tff7b72if Te6edf3setup Tff7b72== Ta5d6ff"Ta5d6ffnot_a_directoryTa5d6ff"Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6fffileTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_storage_has_meshchat_data_empty_stringTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4) Tff7b72is Tff7b72False
Tff7b72def Td2a8fftest_resolve_redirect_when_new_empty_legacy_has_dataTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3leg_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3ident Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3identTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3leg_home
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6fftarget_pathTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3new_home
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6fflegacy_pathTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3leg_home
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_resolve_new_has_identity_no_redirectTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3leg_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3new_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_resolve_legacy_empty_no_promptTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3leg_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_resolve_on_legacy_pathTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3leg_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3ident Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3identTb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3leg_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3leg_home
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6fftarget_pathTa5d6ff"Tb4b4b4] Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffparametrizeTb4b4b4(Ta5d6ff"Ta5d6fftruthyTa5d6ff"Tb4b4b4, Tb4b4b4(Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6fftrueTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffyesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffTRUETa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff Yes Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_resolve_skip_env_variantsTb4b4b4(Te6edf3monkeypatchTb4b4b4, Te6edf3truthyTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3leg_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsetenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3truthyTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_resolve_relative_non_dot_nameTb4b4b4(Te6edf3monkeypatchTb4b4b4, Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3monkeypatchTff7b72.Td2a8ffchdirTb4b4b4(Te6edf3tmp_pathTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffstorageTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72def Td2a8fftest_migrate_and_freshTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"
Te6edf3srcTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3sub Tff7b72= Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffaaTa5d6ff"
Te6edf3subTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3sub Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffdbTa5d6ff"Tb4b4b4)
Te6edf3migrate_legacy_to_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffaaTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffread_textTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffdbTa5d6ff"
Te6edf3fresh Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6fffreshTa5d6ff"
Te6edf3fresh_storage_at_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3freshTb4b4b4)Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3fresh Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Te6edf3id2 Tff7b72= Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3id2Tff7b72.Td2a8ffloadTb4b4b4(Tffa657strTb4b4b4(Te6edf3fresh Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72assert Te6edf3id2Tff7b72.Td2a8ffhash Tff7b72is Tff7b72not Tff7b72None
Tff7b72def Td2a8fftest_migrate_rejects_nonempty_targetTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdTa5d6ff"
Te6edf3srcTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3dstTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3migrate_legacy_to_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_fresh_rejects_nonempty_targetTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)
Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3fresh_storage_at_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_assert_migration_context_pathsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3ctx Tff7b72= Tb4b4b4{
Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4: Tff7b72TrueTb4b4b4,
Ta5d6ff"Ta5d6fflegacy_pathTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/a/.reticulum-meshchatTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fftarget_pathTa5d6ff"Tb4b4b4: Ta5d6ff"Ta5d6ff/a/.reticulum-meshchatxTa5d6ff"Tb4b4b4,
Tb4b4b4}
Te6edf3assert_migration_context_pathsTb4b4b4(
Te6edf3ctxTb4b4b4, Ta5d6ff"Ta5d6ff/a/.reticulum-meshchatTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/a/.reticulum-meshchatxTa5d6ff"
Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3assert_migration_context_pathsTb4b4b4(
Te6edf3ctxTb4b4b4, Ta5d6ff"Ta5d6ff/b/.reticulum-meshchatTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/a/.reticulum-meshchatxTa5d6ff"
Tb4b4b4)
Tff7b72def Td2a8fftest_assert_migration_context_requires_show_choiceTb4b4b4(Tb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3assert_migration_context_pathsTb4b4b4(Tb4b4b4{Tb4b4b4}Tb4b4b4, Ta5d6ff"Ta5d6ff/a/xTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/b/yTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_copy_rejects_same_pathTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3one Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffxTa5d6ff"
Te6edf3oneTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3copy_legacy_storage_treeTb4b4b4(Tffa657strTb4b4b4(Te6edf3oneTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3oneTb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_copy_rejects_missing_sourceTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Tff7b72with Te6edf3pytestTff7b72.Td2a8ffraisesTb4b4b4(Tf85149ValueErrorTb4b4b4)Tb4b4b4:
Te6edf3copy_legacy_storage_treeTb4b4b4(Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffmissingTa5d6ff"Tb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72def Td2a8fftest_copy_skips_pycache_and_pycTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ff__pycache__Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ff__pycache__Ta5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffx.pycTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ffokTa5d6ff"Tb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffbad.pycTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Ta5d6ff2Ta5d6ff"Tb4b4b4)
Te6edf3copy_legacy_storage_treeTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffkeep.txtTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffread_textTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffokTa5d6ff"
Tff7b72assert Tff7b72not Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ff__pycache__Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)
Tff7b72assert Tff7b72not Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffbad.pycTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffexistsTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_copy_preserves_mode_bitsTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"
Te6edf3srcTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3exe Tff7b72= Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffrun.shTa5d6ff"
Te6edf3exeTff7b72.Td2a8ffwrite_textTb4b4b4(Ta5d6ff"Ta5d6ff#!/bin/shTffea00\nTa5d6ffecho hiTffea00\nTa5d6ff"Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffchmodTb4b4b4(Te6edf3exeTb4b4b4, Te6edf3statTff7b72.Td2a8ffS_IRUSR Tff7b72| Te6edf3statTff7b72.Td2a8ffS_IWUSR Tff7b72| Te6edf3statTff7b72.Td2a8ffS_IXUSRTb4b4b4)
Te6edf3copy_legacy_storage_treeTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Te6edf3st Tff7b72= Te6edf3osTff7b72.Td2a8ffstatTb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffrun.shTa5d6ff"Tb4b4b4)
Tff7b72assert Te6edf3statTff7b72.Td2a8ffS_IMODETb4b4b4(Te6edf3stTff7b72.Td2a8ffst_modeTb4b4b4) Tff7b72& Te6edf3statTff7b72.Td2a8ffS_IXUSR
Tf0883e@pytestTff7b72.Td2a8ffmarkTff7b72.Td2a8ffskipifTb4b4b4(Te6edf3osTff7b72.Td2a8ffname Tff7b72== Ta5d6ff"Ta5d6ffntTa5d6ff"Tb4b4b4, Te6edf3reasonTff7b72=Ta5d6ff"Ta5d6ffsymlink semantics differ on WindowsTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8fftest_copy_symlink_fileTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"
Te6edf3srcTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3real Tff7b72= Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffdata.binTa5d6ff"
Te6edf3realTff7b72.Td2a8ffwrite_bytesTb4b4b4(Ta5d6ffbTa5d6ff"Tffea00\x00Tffea00\x01Ta5d6ff"Tb4b4b4)
Te6edf3link Tff7b72= Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6fflink.binTa5d6ff"
Te6edf3linkTff7b72.Td2a8ffsymlink_toTb4b4b4(Ta5d6ff"Ta5d6ffdata.binTa5d6ff"Tb4b4b4)
Te6edf3copy_legacy_storage_treeTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6fflink.binTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_symlinkTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffreadlinkTb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6fflink.binTa5d6ff"Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffdata.binTa5d6ff"
Tff7b72def Td2a8fftest_migrate_unicode_path_segmentTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3seg Tff7b72= Ta5d6ff"Ta5d6ffcafTffea00\u00e9Ta5d6ff-Tffea00\u4e01Ta5d6ff"
Te6edf3src Tff7b72= Te6edf3tmp_path Tff7b72/ Te6edf3seg Tff7b72/ Ta5d6ff"Ta5d6ffsrcTa5d6ff"
Te6edf3dst Tff7b72= Te6edf3tmp_path Tff7b72/ Te6edf3seg Tff7b72/ Ta5d6ff"Ta5d6ffdstTa5d6ff"
Te6edf3srcTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4)
Tb4b4b4(Te6edf3src Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3migrate_legacy_to_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3srcTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3dstTb4b4b4)Tb4b4b4)
Tff7b72assert Tb4b4b4(Te6edf3dst Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tf0883e@settingsTb4b4b4(
Te6edf3max_examplesTff7b72=T79c0ff60Tb4b4b4,
Te6edf3deadlineTff7b72=Tff7b72NoneTb4b4b4,
Te6edf3suppress_health_checkTff7b72=Tb4b4b4[Te6edf3HealthCheckTff7b72.Td2a8fffunction_scoped_fixtureTb4b4b4]Tb4b4b4,
Tb4b4b4)
Tf0883e@givenTb4b4b4(
Te6edf3suffixTff7b72=Te6edf3stTff7b72.Td2a8fftextTb4b4b4(
Te6edf3alphabetTff7b72=Te6edf3stTff7b72.Td2a8ffcharactersTb4b4b4(Te6edf3min_codepointTff7b72=Tffa657ordTb4b4b4(Ta5d6ff"Ta5d6ffaTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3max_codepointTff7b72=Tffa657ordTb4b4b4(Ta5d6ff"Ta5d6ffzTa5d6ff"Tb4b4b4)Tb4b4b4)Tb4b4b4,
Te6edf3min_sizeTff7b72=T79c0ff1Tb4b4b4,
Te6edf3max_sizeTff7b72=T79c0ff20Tb4b4b4,
Tb4b4b4)Tb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8fftest_paired_paths_roundtrip_hypothesisTb4b4b4(Te6edf3tmp_pathTb4b4b4, Te6edf3suffixTb4b4b4)Tb4b4b4:
Te6edf3parent Tff7b72= Tffa657strTb4b4b4(Te6edf3tmp_path Tff7b72/ Te6edf3suffixTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3newp Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3parentTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg Tff7b72= Te6edf3paired_legacy_from_newTb4b4b4(Te6edf3newpTb4b4b4)
Tff7b72assert Te6edf3leg Tff7b72is Tff7b72not Tff7b72None
Tff7b72assert Te6edf3paired_new_from_legacyTb4b4b4(Te6edf3legTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffnormpathTb4b4b4(Te6edf3newpTb4b4b4)
Tff7b72def Td2a8ff_create_old_meshchat_style_sqliteTb4b4b4(Te6edf3db_pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3db_pathTff7b72.Td2a8ffparentTff7b72.Td2a8ffmkdirTb4b4b4(Te6edf3parentsTff7b72=Tff7b72TrueTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3conn Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffPRAGMA journal_mode=WALTa5d6ff"Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffexecutescriptTb4b4b4(
T8b949e"""
CREATE TABLE config (
id INTEGER NOT NULL PRIMARY KEY,
key VARCHAR(255) NOT NULL UNIQUE,
value TEXT NOT NULL
);
CREATE TABLE lxmf_messages (
id INTEGER NOT NULL PRIMARY KEY,
hash VARCHAR(255) NOT NULL UNIQUE,
source_hash VARCHAR(255) NOT NULL,
destination_hash VARCHAR(255) NOT NULL,
state VARCHAR(255) NOT NULL,
progress REAL NOT NULL DEFAULT 0
);
CREATE TABLE announces (
id INTEGER NOT NULL PRIMARY KEY,
destination_hash VARCHAR(255) NOT NULL UNIQUE,
aspect TEXT NOT NULL,
identity_hash VARCHAR(255) NOT NULL,
identity_public_key VARCHAR(255) NOT NULL,
app_data TEXT
);
INSERT INTO config (key, value) VALUES ('database_version', '5');
INSERT INTO lxmf_messages (hash, source_hash, destination_hash, state, progress)
VALUES ('msghex01', 'src01', 'dst01', 'delivered', 1.0);
INSERT INTO announces (destination_hash, aspect, identity_hash, identity_public_key, app_data)
VALUES ('dh01', 'lxmf.delivery', 'ih01', 'pk01', NULL);
"""
Tb4b4b4)
Te6edf3connTff7b72.Td2a8ffcommitTb4b4b4(Tb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3connTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_sqlite_integrity_okTb4b4b4(Te6edf3db_pathTb4b4b4: Te6edf3PathTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3conn Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tffa657strTb4b4b4(Te6edf3db_pathTb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3row Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffPRAGMA integrity_checkTa5d6ff"Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3row Tff7b72is Tff7b72not Tff7b72None Tff7b72and Te6edf3rowTb4b4b4[T79c0ff0Tb4b4b4] Tff7b72== Ta5d6ff"Ta5d6ffokTa5d6ff"
Tff7b72finallyTb4b4b4:
Te6edf3connTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_live_migrate_sqlite_meshchat_like_databaseTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3legacy_root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6fflegacy_layoutTa5d6ff"
Te6edf3legacy_rootTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Te6edf3ident_path Tff7b72= Te6edf3legacy_root Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"
Te6edf3ident_pathTff7b72.Td2a8ffwrite_bytesTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3id_hash Tff7b72= Ta5d6ff"Ta5d6ffa1b2c3d4e5f6789012345678abcdefTa5d6ff"
Te6edf3db_path Tff7b72= Te6edf3legacy_root Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Te6edf3id_hash Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"
Te6edf3_create_old_meshchat_style_sqliteTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3target_root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6fftarget_layoutTa5d6ff"
Te6edf3migrate_legacy_to_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3legacy_rootTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3target_rootTb4b4b4)Tb4b4b4)
Te6edf3migrated_db Tff7b72= Te6edf3target_root Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Te6edf3id_hash Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"
Tff7b72assert Te6edf3migrated_dbTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3_sqlite_integrity_okTb4b4b4(Te6edf3migrated_dbTb4b4b4)
Te6edf3conn Tff7b72= Te6edf3sqlite3Tff7b72.Td2a8ffconnectTb4b4b4(Tffa657strTb4b4b4(Te6edf3migrated_dbTb4b4b4)Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3n Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT COUNT(*) FROM lxmf_messagesTa5d6ff"Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3n Tff7b72== T79c0ff1
Te6edf3h Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT hash FROM lxmf_messages LIMIT 1Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3h Tff7b72== Ta5d6ff"Ta5d6ffmsghex01Ta5d6ff"
Te6edf3ac Tff7b72= Te6edf3connTff7b72.Td2a8ffexecuteTb4b4b4(Ta5d6ff"Ta5d6ffSELECT COUNT(*) FROM announcesTa5d6ff"Tb4b4b4)Tff7b72.Td2a8fffetchoneTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4]
Tff7b72assert Te6edf3ac Tff7b72== T79c0ff1
Tff7b72finallyTb4b4b4:
Te6edf3connTff7b72.Td2a8ffcloseTb4b4b4(Tb4b4b4)
Tff7b72assert Te6edf3ident_pathTff7b72.Td2a8ffread_bytesTb4b4b4(Tb4b4b4) Tff7b72== Tb4b4b4(Te6edf3target_root Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffread_bytesTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8fftest_live_migrate_copies_wal_sidecar_filesTb4b4b4(Te6edf3tmp_pathTb4b4b4)Tb4b4b4:
Te6edf3legacy_root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffwal_srcTa5d6ff"
Te6edf3legacy_rootTff7b72.Td2a8ffmkdirTb4b4b4(Tb4b4b4)
Tb4b4b4(Te6edf3legacy_root Tff7b72/ Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tff7b72.Td2a8ffwrite_bytesTb4b4b4(
Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)
Tb4b4b4)
Te6edf3db_path Tff7b72= Te6edf3legacy_root Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffidwalTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"
Te6edf3_create_old_meshchat_style_sqliteTb4b4b4(Te6edf3db_pathTb4b4b4)
Te6edf3src_dir Tff7b72= Te6edf3db_pathTff7b72.Td2a8ffparent
Te6edf3before Tff7b72= Tb4b4b4{Te6edf3pTff7b72.Td2a8ffname Tff7b72for Te6edf3p Tff7b72in Te6edf3src_dirTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4)Tb4b4b4}
Te6edf3target_root Tff7b72= Te6edf3tmp_path Tff7b72/ Ta5d6ff"Ta5d6ffwal_dstTa5d6ff"
Te6edf3migrate_legacy_to_targetTb4b4b4(Tffa657strTb4b4b4(Te6edf3legacy_rootTb4b4b4)Tb4b4b4, Tffa657strTb4b4b4(Te6edf3target_rootTb4b4b4)Tb4b4b4)
Te6edf3tdb Tff7b72= Te6edf3target_root Tff7b72/ Ta5d6ff"Ta5d6ffidentitiesTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffidwalTa5d6ff" Tff7b72/ Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"
Tff7b72assert Te6edf3tdbTff7b72.Td2a8ffis_fileTb4b4b4(Tb4b4b4)
Te6edf3after Tff7b72= Tb4b4b4{Te6edf3pTff7b72.Td2a8ffname Tff7b72for Te6edf3p Tff7b72in Te6edf3tdbTff7b72.Td2a8ffparentTff7b72.Td2a8ffiterdirTb4b4b4(Tb4b4b4)Tb4b4b4}
Tff7b72assert Te6edf3before Tff7b72== Te6edf3after
Tff7b72assert Te6edf3_sqlite_integrity_okTb4b4b4(Te6edf3tdbTb4b4b4)
Tff7b72def Td2a8fftest_resolve_identities_only_no_root_identityTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3leg_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentitiesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4)Tb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3dbp Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3leg_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentitiesTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffabcTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffdatabase.dbTa5d6ff"Tb4b4b4)
Te6edf3_create_old_meshchat_style_sqliteTb4b4b4(Te6edf3PathTb4b4b4(Te6edf3dbpTb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3leg_home
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_paired_upstream_plain_from_meshchatx_pathsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3p_dot Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffoTa5d6ff"Tb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Tff7b72assert Te6edf3paired_upstream_plain_from_meshchatxTb4b4b4(Te6edf3p_dotTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffoTa5d6ff"Tb4b4b4, Te6edf3UPSTREAM_DIR
Tb4b4b4)
Te6edf3p_plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffoTa5d6ff"Tb4b4b4, Te6edf3UPSTREAM_X_DIRTb4b4b4)
Tff7b72assert Te6edf3paired_upstream_plain_from_meshchatxTb4b4b4(Te6edf3p_plainTb4b4b4) Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(
Ta5d6ff"Ta5d6ff/tmpTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffoTa5d6ff"Tb4b4b4, Te6edf3UPSTREAM_DIR
Tb4b4b4)
Tff7b72assert Te6edf3paired_upstream_plain_from_meshchatxTb4b4b4(Ta5d6ff"Ta5d6ff/tmp/storageTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72None
Tff7b72def Td2a8fftest_auto_upstream_plain_folder_to_dot_meshchatxTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffisfileTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3new_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_auto_upstream_plain_folder_to_plain_meshchatxTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_X_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3storage_has_meshchat_dataTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_auto_upstream_skipped_by_envTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3leg Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3legTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3legTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffsetenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff1Ta5d6ff"Tb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3leg
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_auto_upstream_skipped_when_target_already_has_dataTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3new_homeTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_auto_upstream_prefers_plain_over_dot_legacy_redirectTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3leg Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3legTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3legTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffabspathTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72True
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72def Td2a8fftest_auto_upstream_oserror_falls_through_to_dot_legacyTb4b4b4(Te6edf3monkeypatchTb4b4b4)Tb4b4b4:
Te6edf3root Tff7b72= Te6edf3tempfileTff7b72.Td2a8ffmkdtempTb4b4b4(Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3new_home Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3CURRENT_DIRTb4b4b4)
Te6edf3plain Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3UPSTREAM_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3plainTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3plainTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3leg Tff7b72= Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3LEGACY_DIRTb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3legTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72with Tffa657openTb4b4b4(Te6edf3osTff7b72.Td2a8ffpathTff7b72.Td2a8ffjoinTb4b4b4(Te6edf3legTb4b4b4, Ta5d6ff"Ta5d6ffidentityTa5d6ff"Tb4b4b4)Tb4b4b4, Ta5d6ff"Ta5d6ffwbTa5d6ff"Tb4b4b4) Tff7b72as Te6edf3fTb4b4b4:
Te6edf3fTff7b72.Td2a8ffwriteTb4b4b4(Te6edf3RNSTff7b72.Td2a8ffIdentityTb4b4b4(Te6edf3create_keysTff7b72=Tff7b72TrueTb4b4b4)Tff7b72.Td2a8ffget_private_keyTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3osTff7b72.Td2a8ffmakedirsTb4b4b4(Te6edf3new_homeTb4b4b4, Te6edf3exist_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_LEGACY_MIGRATION_UITa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Te6edf3monkeypatchTff7b72.Td2a8ffdelenvTb4b4b4(Ta5d6ff"Ta5d6ffMESHCHAT_SKIP_UPSTREAM_FOLDER_MIGRATIONTa5d6ff"Tb4b4b4, Te6edf3raisingTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72with Te6edf3patchTb4b4b4(
Ta5d6ff"Ta5d6ffmeshchatx.src.backend.legacy_migrator.migrate_legacy_to_targetTa5d6ff"Tb4b4b4,
Te6edf3side_effectTff7b72=Tf85149OSErrorTb4b4b4(Ta5d6ff"Ta5d6ffsimulated copy failureTa5d6ff"Tb4b4b4)Tb4b4b4,
Tb4b4b4)Tb4b4b4:
Te6edf3effTb4b4b4, Te6edf3ctx Tff7b72= Te6edf3resolve_startup_storageTb4b4b4(Te6edf3new_homeTb4b4b4)
Tff7b72assert Te6edf3eff Tff7b72== Te6edf3leg
Tff7b72assert Te6edf3ctxTb4b4b4[Ta5d6ff"Ta5d6ffshow_choiceTa5d6ff"Tb4b4b4] Tff7b72is Tff7b72True
Tff7b72assert Te6edf3ctxTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffdid_auto_upstream_folder_copyTa5d6ff"Tb4b4b4) Tff7b72is Tff7b72not Tff7b72True
Tff7b72finallyTb4b4b4:
Te6edf3shutilTff7b72.Td2a8ffrmtreeTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3ignore_errorsTff7b72=Tff7b72TrueTb4b4b4)
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────